Computer systems not only store data to be accessed both locally and through a network but they are also capable of performing a wide variety of data protection technologies. Data protection technologies can include, for example, backups, mirroring, snapshots, etc. Providing local and network access to data blocks or data files along with employing a myriad of data protection technologies often correlates to a competition for computer system resources. For example, most storage devices are limited in the amount of reads and writes that can take place during any given time period. If after every write to a storage device, a second write is made to backup device, a third write is made to a mirror, and a fourth write is made to a snapshot storage device, performance of the system during these consecutive or parallel read/writes may suffer.
One way to increase performance and decrease competition for resources is to avoid unnecessary reads or writes by cataloging and/or indexing more information related to the storage and access of data. For example, in a snapshot system targeting Copy on First Write (“CoFW”) data, a snapshot of the data is taken at the time the data is first updated, e.g., storing the original data in the CoFW snapshot and then updating the original data in its resident storage device. Thus, when a processor of the computer system receives an instruction to modify the original data block of the particular storage volume (e.g., a write instruction, a read-modify-write instruction, etc.), the processor allocates memory and then reads the original data block of the storage volume from disk into the allocated memory. However, reading the original data block from disk may take place even if the original data block already resides in the buffer cache of the computer system due to an earlier Input/Output (“I/O”) request.
It is understood that by identifying data blocks that already reside in cache memory as data blocks necessary for performing data protection processes, the data blocks already residing in the buffer cache can be read and used in writing the data blocks to a snapshot storage device, a mirroring storage device, a backup storage device, etc, without performing a disk I/O. This can increase the efficiency of these data protection processes by reducing disk I/O. However, one limitation is that data blocks necessary to perform the data protection processes may not always reside in the buffer cache. Thus, there exists a need to identify data blocks that are necessary to perform the data protection processes and place them in the buffer cache, for later or concurrent access by data protection processes, without increasing sequential disk I/O.